type SystemType<T> = new (...args: any[]) => T;

interface System {
    onLoad?(): void;
    onEnable?(): void;
    onDisable?(): void;
    onUpdate(deltaTime: number): void;
}

class SystemManager {
    private systems: System[];
    private enabledSystems: Set<System>;

    constructor() {
        this.systems = [];
        this.enabledSystems = new Set();
    }

    /**
     * 注册一个系统
     * @param system 系统实例
     */
    registerSystem(system: System): void {
        this.systems.push(system);
        if (system.onLoad) {
            system.onLoad();
        }
    }

    /**
     * 启用一个系统
     * @param system 系统实例
     */
    enableSystem(system: System): void {
        if (!this.enabledSystems.has(system)) {
            this.enabledSystems.add(system);
            if (system.onEnable) {
                system.onEnable();
            }
        }
    }

    /**
     * 禁用一个系统
     * @param system 系统实例
     */
    disableSystem(system: System): void {
        if (this.enabledSystems.has(system)) {
            this.enabledSystems.delete(system);
            if (system.onDisable) {
                system.onDisable();
            }
        }
    }

    /**
     * 更新所有启用的系统
     * @param deltaTime 时间间隔
     */
    updateSystems(deltaTime: number): void {
        this.enabledSystems.forEach(system => {
            system.onUpdate(deltaTime);
        });
    }
}
